package com.zb.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zb.entity.ZjAdmModule;
import com.zb.entity.dto.ModuleDto;
import com.zb.entity.dto.ModuleInfo;
import com.zb.entity.dto.ModuleSelectDto;
import com.zb.mapper.ZjAdmModuleMapper;
import com.zb.service.ZjAdmModuleService;
import com.zb.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 后台模块表 服务实现类
 * </p>
 *
 * @author WEN
 * @since 2023-07-12
 */
@Service
public class ZjAdmModuleServiceImpl extends ServiceImpl<ZjAdmModuleMapper, ZjAdmModule> implements ZjAdmModuleService {
    @Autowired
    private ZjAdmModuleMapper moduleMapper;

    // 新增或修改模块
    @Override
    public void save(ModuleDto moduleDto) {
        Assert.isTrue(null == moduleMapper.existByName(moduleDto.getId(), moduleDto.getName()),
                "模块名称已经存在，不可重复添加或修改！", moduleDto.getName());
        Assert.isTrue(null == moduleMapper.existByCode(moduleDto.getId(), moduleDto.getCode()),
        "模块编码已经存在，不可重复添加或修改！", moduleDto.getCode());

        ZjAdmModule module = new ZjAdmModule();
        module.setName(moduleDto.getName());
        module.setCode(moduleDto.getCode());
        if (null != moduleDto.getId()) {
            module.setDisabled(false);
            module.setId(IdWorker.getId());
            this.save(module);
            return;
        }
        module.setId(moduleDto.getId());
        this.updateById(module);
    }

    // 功能模块列表查询
    @Override
    public Map<String, Object> getList(ModuleSelectDto selectDto) {
        QueryWrapper<ZjAdmModule> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("gmt_update");
        if (StringUtils.isNotBlank(selectDto.getCode())) {
            wrapper.like("code", selectDto.getCode());
        }
        if (StringUtils.isNotBlank(selectDto.getName())) {
            wrapper.like("name", selectDto.getName());
        }
        PageUtil.setPageLimit(selectDto);
        Page<ZjAdmModule> page = this.page(new Page<>(selectDto.getPage(), selectDto.getLimit()), wrapper);

        List<ModuleInfo> moduleInfos = new ArrayList<>();
        page.getRecords().forEach(t -> moduleInfos.add(ModuleInfo.beanToInfo(t)));

        return PageUtil.pageList(page.getCurrent(), page.getSize(), page.getTotal(), moduleInfos);
    }

    // 批量禁用或启用功能模块
    @Override
    public void updateBatchDisableById(List<Long> idList, boolean disable) {
        moduleMapper.updateBatchDisableById(idList, disable);
    }
}
